package com.ruoyi.pack.service;

import java.util.List;
import java.util.Map;
import com.ruoyi.pack.domain.PackProject;

/**
 * 项目Service接口
 * 
 * @author ruoyi
 */
public interface IPackProjectService 
{
    /**
     * 查询项目
     * 
     * @param projectId 项目主键
     * @return 项目
     */
    public PackProject selectPackProjectByProjectId(Long projectId);

    /**
     * 查询项目列表
     * 
     * @param packProject 项目
     * @return 项目集合
     */
    public List<PackProject> selectPackProjectList(PackProject packProject);

    /**
     * 查询项目列表（用于导出）
     * 
     * @param packProject 项目
     * @return 项目集合
     */
    public List<PackProject> selectPackProjectListForExport(PackProject packProject);

    /**
     * 新增项目
     * 
     * @param packProject 项目
     * @return 结果
     */
    public int insertPackProject(PackProject packProject);

    /**
     * 新增项目（带物料和仓库权限配置）
     * 
     * @param packProject 项目
     * @return 结果
     */
    public Map<String, Object> insertPackProjectWithDetails(PackProject packProject);

    /**
     * 修改项目
     * 
     * @param packProject 项目
     * @return 结果
     */
    public int updatePackProject(PackProject packProject);

    /**
     * 修改项目（带物料和仓库权限操作）
     * 
     * @param packProject 项目
     * @return 结果
     */
    public Map<String, Object> updatePackProjectWithOperations(PackProject packProject);

    /**
     * 批量删除项目
     * 
     * @param projectIds 需要删除的项目主键集合
     * @return 结果
     */
    public int deletePackProjectByProjectIds(Long[] projectIds);

    /**
     * 删除项目信息
     * 
     * @param projectId 项目主键
     * @return 结果
     */
    public int deletePackProjectByProjectId(Long projectId);

    /**
     * 删除项目信息（增强版，支持强制删除和数据清理）
     * 
     * @param projectId 项目主键
     * @param force 是否强制删除
     * @param cleanupData 是否清理相关数据
     * @return 结果
     */
    public Map<String, Object> deletePackProjectByProjectIdEnhanced(Long projectId, Boolean force, Boolean cleanupData);

    /**
     * 获取项目详情（包含物料和仓库权限信息）
     * 
     * @param projectId 项目主键
     * @return 项目详情
     */
    public PackProject selectPackProjectDetailsByProjectId(Long projectId);

    /**
     * 校验项目编码是否唯一
     * 
     * @param packProject 项目信息
     * @return 结果
     */
    public String checkProjectCodeUnique(PackProject packProject);

    /**
     * 查询公司下的所有项目
     * 
     * @param companyId 公司ID
     * @return 项目集合
     */
    public List<PackProject> selectProjectsByCompanyId(Long companyId);

    /**
     * 查询用户权限范围内的项目
     * 
     * @param packProject 项目查询条件
     * @return 项目集合
     */
    public List<PackProject> selectProjectsByDataScope(PackProject packProject);

    /**
     * 导入项目数据
     * 
     * @param projectList 项目数据列表
     * @param isUpdateSupport 是否支持更新，如果已存在，则进行更新数据
     * @param operName 操作用户
     * @return 结果
     */
    public String importProject(List<PackProject> projectList, Boolean isUpdateSupport, String operName);
} 